package com.beasts.ant.auth.config.swagger;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * Swagger 2
 * TODO swagger2与oauth2整合异常，暂停使用
 *
 * @author Locker
 * @date 20/04/2018 5:02 PM
 * @since 1.0
 */
@Configuration
public class Swagger2Config {

//    @Api：修饰整个类，描述Controller的作用
//    @ApiOperation：描述一个类的一个方法，或者说一个接口
//    @ApiParam：单个参数描述
//    @ApiModel：用对象来接收参数
//    @ApiProperty：用对象接收参数时，描述对象的一个字段
//    @ApiResponse：HTTP响应其中1个描述
//    @ApiResponses：HTTP响应整体描述
//    @ApiIgnore：使用该注解忽略这个API
//    @ApiError ：发生错误返回的信息
//    @ApiImplicitParam：一个请求参数
//    @ApiImplicitParams：多个请求参数

    /**
     * 当前模式
     */
    @Value("${swagger.dev}")
    private boolean isDev;

    /**
     * 扫描包路径
     */
    @Value("${swagger.package}")
    private String basePackage;

    @Bean
    public Docket createRestApi() {
        if (isDev) {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfoDev())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage(basePackage))
                    .paths(PathSelectors.any())
                    .build();
        } else {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfoProd())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage(basePackage))
                    .paths(PathSelectors.any())
                    .build();
        }
    }

    private ApiInfo apiInfoDev() {
        return new ApiInfoBuilder()
                .title("平台技术部-门户部 Oauth2 API - 开发环境")
                .description(" ")
                .termsOfServiceUrl(" ")
                .version("1.0")
                .build();
    }

    private ApiInfo apiInfoProd() {
        return new ApiInfoBuilder()
                .title("平台技术部-门户部 Oauth2 API api文档")
                .description(" ")
                .termsOfServiceUrl(" ")
                .version("1.0")
                .build();
    }

}
